// DriverBehaviorDriver.java
package com.taxi.analysis.driver;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

/**
 * 司机行为分析驱动程序
 * 功能：协调整个司机行为分析MapReduce任务
 * 技术：综合技术（分组+条件+排序+去重+分区+Join）
 */
public class DriverBehaviorDriver {

    public static void main(String[] args) throws Exception {

        if (args.length != 2) {
            System.err.println("使用方法: DriverBehaviorDriver <输入路径> <输出路径>");
            System.exit(-1);
        }

        Configuration conf = new Configuration();
        conf.set("mapreduce.job.name", "NYC_Taxi_Driver_Behavior_Comprehensive_Analysis");
        conf.setInt("mapreduce.task.timeout", 3600000);
        conf.setInt("mapreduce.map.memory.mb", 3072);
        conf.setInt("mapreduce.reduce.memory.mb", 6144);
        conf.setInt("mapreduce.map.java.opts.max.heap", 2457);
        conf.setInt("mapreduce.reduce.java.opts.max.heap", 4915);

        Job job = Job.getInstance(conf, "司机行为分析_综合技术");

        job.setJarByClass(DriverBehaviorDriver.class);
        job.setMapperClass(DriverBehaviorMapper.class);
        job.setReducerClass(DriverBehaviorReducer.class);

        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(Text.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);

        job.setNumReduceTasks(12);

        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));

        System.out.println("=== 启动司机行为分析任务 ===");
        System.out.println("使用技术: 综合技术");
        System.out.println("包含技术:");
        System.out.println("- 分组技术: 按司机分组分析行为模式");
        System.out.println("- 条件过滤技术: 筛选异常行为");
        System.out.println("- 排序技术: 司机效率排名");
        System.out.println("- 去重技术: 去除重复行程模式");
        System.out.println("- 分区技术: 按工作模式分区");
        System.out.println("- Join技术: 司机与地点关联分析");
        System.out.println("分析目标: 司机行为综合评估与优化建议");

        boolean success = job.waitForCompletion(true);

        if (success) {
            System.out.println("=== 司机行为分析任务完成 ===");
            System.out.println("分析结果包含:");
            System.out.println("- 司机行为综合分析");
            System.out.println("- 异常行为检测与风险评估");
            System.out.println("- 司机效率排名与对比");
            System.out.println("- 唯一行程模式挖掘");
            System.out.println("- 工作模式分区分析");
            System.out.println("- 司机地点关联洞察");
        } else {
            System.err.println("=== 司机行为分析任务失败 ===");
        }

        System.exit(success ? 0 : 1);
    }
}
